iT邦幫忙

2023 iThome 鐵人賽

DAY 5
0
Security

一個人的藍隊系列 第 5

Wazuh的管理和設定

  • 分享至 

  • xImage
  •  

前一篇文章我們了解了Wazuh的架構,但架構跟流程往往是比較抽象的
這篇文章我們來進一步了解,如果要進一些展開更具體的管理和設定
可以做些甚麼?要如何去做?這些設定檔案都在哪裡?

首先我們還是放一張昨天圖,以便於待會往下講內容時方便對應
https://ithelp.ithome.com.tw/upload/images/20230920/20114110QDk6Cqh2vF.png

我們簡易回顧一下,在我們的監控架構當中
Wazuh manager會負責分析所有從agent收到的數據事件,並在事件符合規則時觸發警報。
例如,可能的入侵行為、檢測到檔案權限被變更、系統設定不符合稽核策略、日誌內容觸發到告警規則等

所以這個Wazuh manager可以說是我們Wazuh的核心,
如果往後文章內容我有提到Wazuh server,通常也指的就是Wazuh manager這一個服務。

所以我們先來了解兩個重要的設定檔案的位置
設定檔的名稱叫做ossec.conf

就這樣XD 說好的兩個呢? 騙我
沒有騙你XD 只是兩個設定檔案的名稱都一樣
一個在server端, 一個在client端

所以要請大家不要混淆了
第一個是在server端的ossec.conf
我們可以進入到wazuh manager的容器內
在/var/ossec/etc底下查看到該檔案

docker exec -it single-node_wazuh.manager_1 bash
cd /var/ossec/etc
cat ossec.conf

內容摘要如下

<ossec_config>
  <global>
    <jsonout_output>yes</jsonout_output>
    <alerts_log>yes</alerts_log>
    <logall>no</logall>
    <logall_json>no</logall_json>
    <email_notification>no</email_notification>
    <smtp_server>smtp.example.wazuh.com</smtp_server>
    <email_from>wazuh@example.wazuh.com</email_from>
    <email_to>recipient@example.wazuh.com</email_to>
    <email_maxperhour>12</email_maxperhour>
    <email_log_source>alerts.log</email_log_source>
    <agents_disconnection_time>10m</agents_disconnection_time>
    <agents_disconnection_alert_time>0</agents_disconnection_alert_time>
  </global>

...SKIP...

  <localfile>
    <log_format>syslog</log_format>
    <location>/var/ossec/logs/active-responses.log</location>
  </localfile>

</ossec_config>

第二個是在agent端的ossec.conf
路徑也同樣是在/var/ossec/etc

cd /var/ossec/etc
cat ossec.conf

內容摘要如下

<!--
  Wazuh - Agent - Default configuration for ubuntu 22.04
  More info at: https://documentation.wazuh.com
  Mailing list: https://groups.google.com/forum/#!forum/wazuh
-->

<ossec_config>
  <client>
    <server>
      <address>192.168.101.139</address>
      <port>1514</port>
      <protocol>tcp</protocol>
    </server>
    <config-profile>ubuntu, ubuntu22, ubuntu22.04</config-profile>
    <notify_time>10</notify_time>
    <time-reconnect>60</time-reconnect>
    <auto_restart>yes</auto_restart>
    <crypto_method>aes</crypto_method>
    <enrollment>
      <enabled>yes</enabled>
      <groups>default</groups>
      <authorization_pass_path>etc/authd.pass</authorization_pass_path>
    </enrollment>
  </client>

 ...SKIP...

  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/dpkg.log</location>
  </localfile>

  <localfile>
    <log_format>syslog</log_format>
    <location>/var/log/kern.log</location>
  </localfile>

</ossec_config>

眼尖的你一定很快就發現兩個檔案內容是不太一樣的
ossec.conf可以說是最重要的設定檔之一
內容是以XML格式撰寫
相關的參數與值可以參考官方的文件
https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/index.html

裡面有提到哪些欄位是屬於manager哪些屬於agent的
或者是兩個都可以生效的

Server 設定部分

接下來我們來看幾個ossec.conf的設定內容
首先我們關注到server端的ossec.conf
在Wazuh manager server上面的ossec.conf可以設定服務細節
這邊講幾個欄位(sections)

  • global
  • remote
  • alerts

這幾個是在server端manager才會生效的欄位

global

globa的設定作用於整個系統的功能
包含了預設的輸出格式,SMTP的相關資訊設定
這邊可能不會修改到,但還是需要知道
至少有需要修改或是知道某些資訊的時候需要看這邊

remote service

https://documentation.wazuh.com/current/user-manual/manager/remote-service.html

remote欄位可以設定服務監聽的細節
例如監聽的要選擇的網卡,允許或不允許的IP,Port等等..

local_ip預設沒有寫的話就會是listen all
我們也可以指定特定IP去監聽
也可以修改監聽的port或是修改接受數據的size

詳細參數可以看這
https://documentation.wazuh.com/current/user-manual/reference/ossec-conf/remote.html#reference-ossec-remote

<ossec_config>
  <remote>
    <local_ip>10.0.0.10</local_ip>
  </remote>
</ossec_config>

這邊根據自身場域的情況,可以修改符合相關用途
或是來做存取控制的加強防護,提升安全性

alerts

Wazuh manager負責蒐集和解析來自agent的資訊(例如log)解析成event
alerts的標籤可以讓我們透過log_alert_level設定多少level以上的事件
才觸發記錄到alerts.log跟alerts.json
這個算是一個滿實用需要注意的部分

所以這邊我們也可以先理解, 資訊都會被送到server上解析
可以當成是events
但是evnets不一定會成為alert
alert也有分等級(level),例如level 0或1的alert
可能都是作為一些規則判斷上的使用
不會觸發alert log,你在Dashboard上查看時也不會看到這些alert

然後wazuh alert也可以串接發送通知信件
當然這個一定是必備的功能
如果我們信件整天被alert淹沒也是不行的
所以它其實可以區分要觸發email alert的level

<alerts>
    <log_alert_level>3</log_alert_level>
    <email_alert_level>12</email_alert_level>
  </alerts>

而對於eamil alert設定
可以設定為事件觸發或是每日通知

<ossec_config>
    <global>
        <email_notification>yes</email_notification>
        <email_to>me@test.com</email_to>
        <smtp_server>mail.test.com</smtp_server>
        <email_from>wazuh@test.com</email_from>
    </global>
    ...
</ossec_config>

Agent 設定部分

接下來我們來看Agent端的ossec.conf的設定內容

主要我們看第一個client這個tag,可以說是最重要的
這這個tag底下還有有個欄位server
裡面記錄了要將資訊給推送到那一台主機
哪一個port以及使用甚麼協定

注意,所以如果你在sever端的設定有修改
(例如你更換了server ip跟port)
這邊也要記得變更

如果你發現在agent端
使用systemctl status wazuh-agent查看運行狀態是正常
但是sever卻沒有正常接受到agent的註冊
可以來這邊確認看看
是否有正確的設定address, port, protocol連線到server

<client>
    <server>
      <address>192.168.101.139</address>
      <port>1514</port>
      <protocol>tcp</protocol>
    </server>
    <config-profile>ubuntu, ubuntu22, ubuntu22.04</config-profile>
    <notify_time>10</notify_time>
    <time-reconnect>60</time-reconnect>
    <auto_restart>yes</auto_restart>
    <crypto_method>aes</crypto_method>
    <enrollment>
      <enabled>yes</enabled>
      <groups>default</groups>
      <authorization_pass_path>etc/authd.pass</authorization_pass_path>
    </enrollment>
  </client>

其他的sections大部分都是描述要在這台agent執行哪些規則的解析
例如要解析哪些目錄的日誌、要啟用哪些模組、多久掃描一次、檔案檢查要檢查哪些路徑等等

當然,ossec.conf的內容還很多,沒有需要全講
然後有些欄位則是後續會提到的

Agent management

接著我們先來講一下如何進行Agent management

https://documentation.wazuh.com/current/user-manual/agents/index.html

下面這張圖是agent的生命週期
agent life cycle (agent會有的狀態)
https://ithelp.ithome.com.tw/upload/images/20230920/20114110tL4TbCqkgV.png

要修改Agent上的設定檔的管理方式有兩種

1.直接連線到主機上修改agent主機上面的ossec.conf,這種方式要手動到agne主機上修改,需要耗費人力,不切實際。當然稍微聰明一點利用Iac如ansible的方式去修改也是可以。這邊我們作為連線,手動連過去改是沒問題的,但在場域中如果主機數量非常多,一定不可能這樣做。

2.正確姿勢,從manager server利用centralized configuration的方式進行remotely管理。透過中央的方式來進行大量統一的管理。另外,如果使用remotely的方式管理,可以透過將agent進行分組(group),達到細粒度的管控。除非一開始有進行額外的設定,否則所有的agent預設會屬於default這個群組,設定檔的路徑都在Manager上面的/var/ossec/etc/shared/default。

我們要遠端查看目前所有agnet狀態,或對agent進行操作
可以利用的方法有三種

  1. CLI
  2. API
  3. Dashboard

剛剛提到中央remotely管理
所以我們這邊可以簡單做個無聊的實驗
我們來修改一下sever上面的這個agent.conf
因為容器上面沒有VIM
所以我直接在主機上面改
修改一下註解內容
或者我們要多加一個設定項目都可以

cd /var/lib/docker/volumes/
vim single-node_wazuh_etc/_data/shared/default/agent.conf

https://ithelp.ithome.com.tw/upload/images/20230920/20114110XcYb4HSv8C.png

https://ithelp.ithome.com.tw/upload/images/20230920/201141103SndFU1EYC.png

儲存之後我們reload wazuh服務

要重啟有幾種方式
最粗暴的就是docker-compose全部重啟

docker-compose restart

微粗暴,把manager的容器重新啟動

docker restart single-node_wazuh.manager_1

或者我們可以只單純重啟wazuh service

docker exec single-node_wazuh.manager_1 service wazuh-manager restart

隨便選擇上面其中一種方式
接著我們可以到agent查看檔案內容已經有被變更
(就是我們有安裝nginx的那一台agent主機)

cd /var/ossec/etc/shared
ls
cat agent.conf

https://ithelp.ithome.com.tw/upload/images/20230920/201141103Uwr6f6mme.png

額外補充
如果發現沒有work,首先第一步請先確認server與agent的通訊是正常的
可以看看dashoard看看agent是正常的狀態嗎?
或是可以在agent輸入sudo -s等指令(因為這個指令會觸發alert)
然後在sever dashboard查看是否有接受到alert

以上demo
確認完設定檔可以從中央派送部署到agent
就大功告成了
以後就不需要一台一台Agent去修改ossec的設定

最後我們來探討一下優先級
如果servre端設定與agent端的ossec.conf的檔案內容有衝突怎麼辦呢

間單來說,先知道一下,wazuh的優先規則都是這樣的
越後面被讀取的設定,會覆蓋先前讀取的

如果寫在同一個檔案裡面的話
寫在比較下面的內容會覆蓋上面的

而從ossec.conf以及shared底下的agent.conf來討論
官方表示會先讀取agent端的ossec.conf
才去讀取server中央管理的agent.conf
所以agent.conf會覆蓋ossec.conf的規則
也就是表示agent.conf的優先級比較高

那如果設定內容是沒有衝突的,就會被合併一起生效
有衝突的話,會使用agent.conf的設定

It's important to understand which configuration file takes precedence between ossec.conf and agent.conf when the central configuration is used. When this configuration is utilized, the local and the shared configuration are merged, however, the ossec.conf file is read before the shared agent.conf and the last configuration of any setting will overwrite the previous. Also, if a file path for a particular setting is set in both of the configuration files, both paths will be included in the final configuration.


上一篇
Wazuh 架構
下一篇
Wazuh 檢測能力POC:Part 1
系列文
一個人的藍隊30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言